09 Criando a primeira diretiva

Próxima Atividade
  • Sugerir melhoria
Play
Current Time 0:00
/
Duration Time 0:00
Remaining Time -0:00
Stream TypeLIVE
Loaded: 0%
Progress: 0%
0:00
Fullscreen
00:00
Mute
Playback Rate
  • 2x
  • 1.5x
  • 1.2x
  • 1x
  • 0.8x
  • 0.7x
1x
Subtitles
  • subtitles off
Captions
  • captions off
Chapters
  • Chapters
HD

Transcrição

Pensando em outra melhoria, ao passarmos o mouse sobre cada card, podemos fazer com que ele ganhe um tom mais escuro para dar destaque. Poderíamos utilizar a pseudo class hover do CSS, não é? Mas e se quisermos aplicar o mesmo efeito na lupa, ou no placeholder "search" no campo de busca, ou em qualquer outro componente existente em nossa aplicação?

Teríamos que repetir o CSS, mas a ideia é pegarmos o comportamento desejado, o qual não pertence a nenhum componente em específico, e isolá-lo em um único local. Para isso, criaremos nossa primeira diretiva, a Custom Directive.

Todo componente é uma diretiva. A diferença é que @Component, por exemplo, está atrelado a um template, o que não ocorre com a diretiva.

Então, criaremos uma pasta em "shared" chamada "directives", em que colocaremos todas as diretivas. Nela, também criaremos uma pasta denominada "darken-on-hover", dentro da qual criaremos a primeira diretiva. Se tivermos outra diretiva, criaremos outra pasta, e assim por diante, isso porque ainda não estamos trabalhando com arquivos de testes, ou similares.

Criaremos o módulo desta diretiva, darken-on-hover.module.ts, em "darken-on-hover", no qual também criaremos darken-on-hover.directive.ts — isso não é muito diferente do que fizemos até então.

No arquivo da diretiva, teremos:

import { Directive } from '@angular/core';

@Directive({
    selector: ''
})
export class DarkenOnHoverDirective { }

Neste caso, a diretiva será utilizada da seguinte forma: se tivermos um componente <a>, por exemplo, e queremos aplicar o efeito de escurecimento ao passarmos o mouse sobre ele, poderemos digitar algo como <a apDarkOnHover></a>. Isto é, usaremos a diretiva como se fosse um atributo, diretamente na tag ou componente. No entanto, para tal, teremos que colocar seu selector entre colchetes:

@Directive({
    selector: '[apDarkenOnHover]'
})

Enquanto isso, o conteúdo de darken-on-hover.module.ts será:

import { NgModule } from '@angular/core';
import { DarkenOnHoverDirective } from './darken-on-hover.directive';

@NgModule({
    declarations: [ DarkenOnHoverDirective ],
    exports: [ DarkenOnHoverDirective ]
})
export class DarkenOnHoverModule { }

Em "photo-list > photos > photos.component.html" incluiremos a diretiva apDarkenOnHover na <div>, que é onde queremos aplicar este efeito. Veremos mais detalhes sobre esta implementação a seguir.

Tirar dúvida Próxima Atividade
ícone Angular parte 1: Fundamentos

Angular parte 1: Fundamentos

100%
Aula07 de 07

Lapidando ainda mais nossa aplicação

Atividades 9 de 14

  • 01 Projeto da aula anterior
  • 02 Submódulos 14min
  • 03 Integração com Font Awesome 09min
  • 04 Component container e ng-content 14min
  • 05 Desaparecimento de elementos
  • 06 Componentizando o filtro 08min
  • 07 Output property 09min
  • 08 Sobre output property
  • 09 Criando a primeira diretiva 06min
  • 10 Terminando a implementação da diretiva 11min
  • 11 Sobre diretivas
  • 12 Considerações finais 01min
  • 13 Consolidando seu conhecimento
  • 14 Projeto completo

Aulas

Outros Links

Fórum Trocar Curso
Gravatar de Marcos Katsumi Kay

Marcos Katsumi Kay 34.4k xp

Logo da Alura